Načtení knihovny
library("tidyverse")
library("stringr")
library("ggplot2")
library("tidyverse")
library("dplyr")
V souboru „fraze.txt“ (kódování UTF-8) najdete spoustu anglických frází, vaším úkolem je vytvořit funkci, která na zavolání
načte zadaná data a
vrátí soubor „fraze_zpracovano.txt“. Výstupem funkce bude
list se dvěma prvky
vektor všech frází, které jsou palindrom,
vektor všech frází, které nejsou palindrom.
Co je palindrom se dozvíte zde
Ignorujte interpunkci apod., jako argument k funkci použijte argumenty odkazující na cestu ke vstupnímu souboru a k výstupnímu souboru.
Vytvoření funkce
func_Zpracovani_faze <- function(soubor_fraze, fraze_rozpracovano){
# Načtení dat
fraze <- read_lines(soubor_fraze, locale = locale(encoding = "UTF-8"))
# Funkce pro kontrolu, zda je fráze palindrom
je_palindrom <- function(text) {
## odstranit nealfanumerické znaky = znaky ke formátování textu (např. tabulátor, konec odstavce, pevná mezera apod.), není součástí vlastního textu, není viditelný pouze na monitoru
cisty_text <- str_to_lower(str_replace_all(text, "[^a-z]", ""))
## obrátit pořadí znaků v cistém textu.
rev_text <- stringi::stri_reverse(cisty_text)
return(str_detect(cisty_text, rev_text))
}
# Vytvoření vektorů pro palindromy a ne-palindromy
palindromy <- fraze[sapply(fraze, je_palindrom)]
nepalindromy <- fraze[!sapply(fraze, je_palindrom)]
# Počet ohodnocených frází
pocet_palindromu <- length(palindromy)
pocet_nepalindromu <- length(nepalindromy)
# Průměrná délka frází
prumer_palindromu <- mean(str_length(palindromy))
prumer_nepalindromu <- mean(str_length(nepalindromy))
# Průměrný počet slov ve frázích
## \s+ = odpovídá všemu, čemu neodpovídá \s , tj. čemu neodpovídá bílý znak. --> poučítá se jen písmena nikoliv s mezerou
prumer_slov_palindromu <- mean(str_count(palindromy, "\\S+"))
prumer_slov_nepalindromu <- mean(str_count(nepalindromy, "\\S+"))
# Zastoupení palindromu v procentech
zastoupeni_palindromu <- (pocet_palindromu / length(fraze)) * 100
# Vytvoření listu s výsledky
vysledky <- list(
palindromy = palindromy,
nepalindromy = nepalindromy
)
# Zápis výsledků do souboru
write_lines(paste("Palindromy:", palindromy, collapse = "\n"), fraze_rozpracovano)
write_lines(paste("Ne-palindromy:", nepalindromy, collapse = "\n"), fraze_rozpracovano, append = TRUE)
# Výpis do konzole
cat("Počet palindromů:", pocet_palindromu, "\n")
cat("Průměrná délka palindromů:", prumer_palindromu, "\n")
cat("Průměrný počet slov v palindromech:", prumer_slov_palindromu, "\n")
cat("Počet ne-palindromů:", pocet_nepalindromu, "\n")
cat("Průměrná délka ne-palindromů:", prumer_nepalindromu, "\n")
cat("Průměrný počet slov v ne-palindromech:", prumer_slov_nepalindromu, "\n")
cat("Zastoupení palindromů v procentech:", zastoupeni_palindromu, "%\n")
return(vysledky)
}
Testování funkce
func_Zpracovani_faze("fraze.txt", "fraze_zpracovano.txt")
## Počet palindromů: 5
## Průměrná délka palindromů: 22.2
## Průměrný počet slov v palindromech: 4.8
## Počet ne-palindromů: 290
## Průměrná délka ne-palindromů: 28.11034
## Průměrný počet slov v ne-palindromech: 5.934483
## Zastoupení palindromů v procentech: 1.694915 %
## $palindromy
## [1] "A race car. A..."
## [2] "Hm... SMH!"
## [3] "I did, did I?"
## [4] "I made border bard’s drowsy swords; drab, red robed am I."
## [5] "Vanna, wanna V?"
##
## $nepalindromy
## [1] "Able was I ere I saw Elba."
## [2] "A butt tuba."
## [3] "A car, a man, a maraca."
## [4] "A dank, sad nap. Eels sleep and ask nada."
## [5] "A dog! A panic in a pagoda."
## [6] "A dog, a plan, a canal: pagoda."
## [7] "A fool, a tool, a pool; LOOPALOOTALOOFA!"
## [8] "A lot not new I saw as I went on to L.A."
## [9] "A man, a pain, a mania, Panama."
## [10] "A man, a plan, a canal, Panama."
## [11] "A man, a plan, an anal panama."
## [12] "A nut for a jar of tuna."
## [13] "A Santa at NASA."
## [14] "A Santa deified at NASA."
## [15] "A Santa dog lived as a devil god at NASA."
## [16] "A Santa lived as a devil at NASA."
## [17] "A Santa lives evil at NASA."
## [18] "A Santa pets rats, as Pat taps a star step at NASA."
## [19] "A Santa snaps pans at NASA."
## [20] "A Santa snips pins at NASA."
## [21] "A Santa spat taps at NASA."
## [22] "A Santa spits tips at NASA."
## [23] "A Santa spots tops at NASA."
## [24] "A Santa taps Pat at NASA."
## [25] "A tin mug for a jar of gum, Nita."
## [26] "A Toyota."
## [27] "A Toyota's a Toyota."
## [28] "A Toyota! Race fast... safe car: a Toyota"
## [29] "Skoda is da best"
## [30] "Able was I ere I saw Elba."
## [31] "Age, irony, Noriega."
## [32] "Ah, Satan sees Natasha."
## [33] "Al lets Della call Ed “Stella.”"
## [34] "Alan Alda stops racecar, spots ad: \"Lana-L.A.\""
## [35] "Amore, Roma."
## [36] "Animal loots foliated detail of stool lamina."
## [37] "Anne, I vote more cars race Rome to Vienna"
## [38] "Are we not drawn onward to new era?"
## [39] "Are we not drawn onward, we few, drawn onward to new era?"
## [40] "Are we not pure? “No, sir!” Panama’s moody Noriega brags. “It is garbage!” Irony dooms a man—a prisoner up to new era."
## [41] "As I pee sir, I see Pisa!"
## [42] "Bird rib."
## [43] "Bob, Level Bob."
## [44] "Borrow or rob?"
## [45] "But sad Eva saved a stub."
## [46] "Cain: A maniac."
## [47] "Campus Motto: Bottoms up, Mac!"
## [48] "Cigar? Toss it in a can. It is so tragic."
## [49] "Dan, is it in? It is in, Ad!"
## [50] "Dammit, I'm mad!"
## [51] "Deer creed"
## [52] "Dee saw a seed."
## [53] "Dee’s in awe Nemo,stop a Toyota,pot some new anise Ed"
## [54] "Degas, are we not drawn onward, no? In union, drawn onward to new eras aged?"
## [55] "Del saw a sled."
## [56] "Delia and Edna ailed"
## [57] "Delia saw I was ailed."
## [58] "Della C., Bob called."
## [59] "Denim axes examined."
## [60] "Dennis sinned."
## [61] "Dennis and Edna sinned."
## [62] "Dennis, Nell, Edna, Leon, Nedra, Anita, Rolf, Nora, Alice, Carol, Leo, Jane, Reed, Dena, Dale, Basil, Rae, Penny, Lana, Dave, Denny, Lena, Ida, Bernadette, Ben, Ray, Lila, Nina, Jo, Ira, Mara, Sara, Mario, Jan, Ina, Lily, Arne, Bette, Dan, Reba, Diane, Lynn, Ed, Eva, Dana, Lynne, Pearl, Isabel, Ada, Ned, Dee, Rena, Joel, Lora, Cecil, Aaron, Flora, Tina, Arden, Noel, and Ellen sinned."
## [63] "Devo met a Mr., eh, DNA and her mate moved."
## [64] "Did I draw Della too tall, Edward? I did?"
## [65] "Dior droid."
## [66] "DNA-land."
## [67] "Do geese see god?"
## [68] "Do good? I? No. Evil anon I deliver. I maim nine more hero-men in Saginaw, sanitary sword a-tuck, Carol, I. Lo! Rack, cut a drowsy rat in Aswan. I gas nine more hero-men in Miami. Reviled, I (Nona) live on. I do, O God."
## [69] "Do nine men interpret? \"Nine men,\" I nod."
## [70] "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod."
## [71] "Dog, as a devil deified, lived as a god."
## [72] "Dogma? I am God."
## [73] "Dogma I won't love; rise, popes, I revolt! Now I am God."
## [74] "Dog's god."
## [75] "Don't nod."
## [76] "Dot saw I was Tod."
## [77] "Drawer as a reward."
## [78] "Draw, o coward!"
## [79] "Dumb mud."
## [80] "Ed, I saw Harpo Marx ram Oprah W. aside."
## [81] "Egad! An adage!"
## [82] "Egan age."
## [83] "Emil peed deep lime."
## [84] "Emil saw a slime."
## [85] "Emit no tot on time."
## [86] "Emit time."
## [87] "Eva can ignite virtuosos out riveting in a cave."
## [88] "Eva, can I stab bats in a cave?"
## [89] "Evade me, Dave."
## [90] "Evade no tone, not one, Dave."
## [91] "Evar, go to grave."
## [92] "Evil, I did dwell, lewd did I live."
## [93] "Evil olive."
## [94] "Flee to me, remote elf."
## [95] "Gateman sees name, garageman sees name tag."
## [96] "Gert, I saw Ron avoid a radio-van, or was it Reg?"
## [97] "Gift fig."
## [98] "Gnu dung."
## [99] "Go deliver a dare, vile dog!"
## [100] "Go hang a salami, I'm a lasagna hog."
## [101] "God! A red nugget! A fat egg under a dog!"
## [102] "God damn mad dog."
## [103] "God lived as a devil dog."
## [104] "God lived on no devil dog."
## [105] "God save Eva's dog."
## [106] "God’s dog."
## [107] "God saw I was dog."
## [108] "God to Hanoi on a hot dog."
## [109] "God, a red nugget. A fat egg under a dog."
## [110] "God, a slap. Paris, sir, appals a dog."
## [111] "God, Edam made dog."
## [112] "Gold log."
## [113] "Goldenrod-adorned log."
## [114] "Golf? No sir, prefer prison flog."
## [115] "Golf log."
## [116] "Gun Nug."
## [117] "Ha! A fig GIF. Aah."
## [118] "I did not revert on Didi."
## [119] "I, lad Dali."
## [120] "I led deli."
## [121] "I, madam, I made radio! So I dared. Am I mad? Am I?"
## [122] "I'm a lasagna, hang a salami."
## [123] "I'm a lass, a salad, new end alas as salami."
## [124] "I'm runnin', Nurmi."
## [125] "I'm, alas, a salami."
## [126] "I maim Miami."
## [127] "I man am Regal, a German am I."
## [128] "I met System I."
## [129] "I roamed under it as a tired, nude Maori."
## [130] "If I had a Hi-Fi."
## [131] "Kay, a red nude, peeped under a yak."
## [132] "Kayak salad, Alaska yak."
## [133] "Ken's snek"
## [134] "KC, answer DNA loop award. Emit time. Draw a pool. Andrew, snack."
## [135] "Kodak ad, OK."
## [136] "Know a wonk?"
## [137] "Lager, sir, is regal."
## [138] "Laid on no dial."
## [139] "Late? Bill is ill. I bet, Al."
## [140] "Lepers repel."
## [141] "Liam's Mail"
## [142] "Liam Stakes Sekat's Mail."
## [143] "Liam Stakes Edna's, Adam's, Otto's, Mada's and Esekat's mail."
## [144] "Lion oil."
## [145] "Lisa Bonet ate no basil."
## [146] "Live evil."
## [147] "Live not on evil, Madam, live not on evil."
## [148] "Lonely Tylenol."
## [149] "Ma is as selfless as I am."
## [150] "Mad at Adam."
## [151] "Madam, I’m Adam."
## [152] "Madam, in Eden, I’m Adam."
## [153] "Man, Oprah's sharp on A.M."
## [154] "Marge, let dam dogs in. Am on satire! Vow I am Cain. Am on spot. Am a Jap sniper. Red, raw murder on GI. Ignore drum. (Warder repins pajama tops.) No maniac, Ma! Iwo veritas: no man is God - Mad telegram."
## [155] "May a moody baby doom a yam?"
## [156] "Moor's room."
## [157] "Mr. Owl ate my metal worm."
## [158] "Must sell at tallest sum"
## [159] "Murder for a jar of red rum."
## [160] "My gym."
## [161] "Nam was a saw man."
## [162] "Name now one man."
## [163] "Name no side in Eden, I’m mad! A maid I am, Adam mine; denied is one man."
## [164] "Naomi, I moan."
## [165] "Naomi, did I moan?"
## [166] "Naomi, Gianna, Ed, Nall, Robert, Allen, Red, Hon, Evan, Eden, Mel, Lola, Alol, Lemned, Enave, Noh, Der, Nella, Trebor, Llan, De, Anna, Ig & I moan."
## [167] "Ne Dews Anna - Sweden"
## [168] "Never even."
## [169] "Never odd or even."
## [170] "No \"x\" in \"Nixon\"."
## [171] "No devil lived on."
## [172] "No, I met System Ion."
## [173] "No, it can, as it is, it is a war. Raw as it is, it is an action."
## [174] "No, it is open on one position."
## [175] "No, it is opposed, art sees trade's opposition"
## [176] "No, it is opposition."
## [177] "No, it never propagates if I set a gap or prevention."
## [178] "No lemon, no melon."
## [179] "No, Mel Gibson is a casino's big lemon."
## [180] "No melon, no lemon."
## [181] "No pet so tragic as a cigar to step on."
## [182] "No, sir, prefer prison."
## [183] "No specific Epson."
## [184] "No stetson."
## [185] "No trace; not one carton."
## [186] "Nog eroded Oregon."
## [187] "Nora, a raft! Is it far, Aaron?"
## [188] "Norma is as selfless as I am, Ron."
## [189] "Nosegay ages on."
## [190] "Not a banana baton."
## [191] "Not a ton."
## [192] "Not New York, Roy went on."
## [193] "Note: nine Devo-organists in a groove den in Eton."
## [194] "Not on."
## [195] "Not so, Boston."
## [196] "Now I see bees, I won."
## [197] "Now's evil for evil? Ah, a liver of lives won."
## [198] "Nurse, I spy gypsies, run!"
## [199] "Nurses run."
## [200] "O Geronimo, no minor ego."
## [201] "O or OO?"
## [202] "O, stone, be not so."
## [203] "Ogre, flog a golfer. Go."
## [204] "Oh no! Don Ho!"
## [205] "Oh, one messy end! I kneel, pshaw, on eye now, ah . . . spleen, kidneys, semen . . . oh . . . o . . ."
## [206] "\"Oh waiter, he sat in Anita's ehretia!\" \"Who?\""
## [207] "On a clover, if alive, erupts a vast pure evil; a fire volcano."
## [208] "Oozy rat in a sanitary zoo."
## [209] "Palindrome, Semordnilap. Palindrome, Semordnilap"
## [210] "Pa's a sap."
## [211] "Pet step."
## [212] "Phenomenal anemone HP"
## [213] "Pope pop."
## [214] "Puff up."
## [215] "Pull up if I pull up."
## [216] "Put Eliot's toilet up."
## [217] "Qatar's rat AQ."
## [218] "Race fast, safe car."
## [219] "Rat Star."
## [220] "Rats drown in WordStar."
## [221] "Rats live on no evil star."
## [222] "Redraw a warder."
## [223] "Reflog a golfer."
## [224] "\"Regal as tide\", Kramer remarked. \"It's a lager!\""
## [225] "Regal lager."
## [226] "Reg, its sarcastic! It's a crass tiger!"
## [227] "Remarkable was I ere I saw Elba Kramer."
## [228] "Reno loner."
## [229] "Retaliate! Get AI later."
## [230] "Rise to vote, sir."
## [231] "Rise, sir lapdog. Revolt, lover God, pal, rise, sir."
## [232] "Rise, take lame female Kate, sir."
## [233] "Rob a loneliness? Senile, no labor."
## [234] "Rot can rob a born actor."
## [235] "Satan oscillate my metallic sonatas."
## [236] "Saw tide rose? So red it was."
## [237] "Senile felines."
## [238] "Sit on a potato pan, Otis."
## [239] "Snack cans."
## [240] "Snug all L.A. guns."
## [241] "So many dynamos."
## [242] "Some men interpret nine memos."
## [243] "Splat, I hit Alps."
## [244] "Stab nail at ill Italian bats."
## [245] "Star comedy by Democrats."
## [246] "Star-red rum and Edna murder rats."
## [247] "Starring NIR rats."
## [248] "Step on no pets."
## [249] "Step Pets."
## [250] "Stop! Murder us not, tonsured rumpots."
## [251] "Stop, Syrian, I start at rats in airy spots."
## [252] "Strap on no parts."
## [253] "Stratagem: megatarts."
## [254] "Straw? No, too stupid a fad; I put soot on warts."
## [255] "Stressed desserts."
## [256] "Stun nuts."
## [257] "Sums are not set as a test on Erasmus."
## [258] "Swen, on gnus, sung no news."
## [259] "Taco cat."
## [260] "Tangy gnat."
## [261] "Tap Pat."
## [262] "Ten animals I slam in a net."
## [263] "Timid, I'm it."
## [264] "Too bad I hid a boot."
## [265] "To call a cot"
## [266] "Too hot to hoot."
## [267] "Top spot."
## [268] "Top's pot."
## [269] "Top step's pup's pet spot."
## [270] "Tuna nut."
## [271] "UFO tofu."
## [272] "Warsaw was raw."
## [273] "Was it a bar or a bat I saw?"
## [274] "Was it a bat I saw?"
## [275] "Was it a car or a cat I saw?"
## [276] "Was it a cat I saw?"
## [277] "Was it a hat I saw?"
## [278] "Was it a rat I saw?"
## [279] "Was it Eliot's toilet I saw?"
## [280] "We few."
## [281] "We panic in a pew."
## [282] "Wet rare paper art, ew!"
## [283] "Won't lovers revolt now?"
## [284] "Wonton? Not now."
## [285] "X-ray at Simi; stay; a Rx."
## [286] "Yo! Banana boy."
## [287] "Yo! Bottoms up, U.S. Motto, boy."
## [288] "You buoy."
## [289] "Zeus was deified, saw Suez."
## [290] "Zoos, Otto & Sooz."
Proveďte 100 000 simulací následujícího problému a vyhodnoťte pravděpodobnosti pro otázky a) - c) níže (náhodné číslo mezi 0 a 1 můžete vygenerovat pomocí funkce runif()):
Co dělá runif
runif(10,min = 0, max = 100) #generuje náhodně 10 hodnot v rozmezí 0 do 100
## [1] 55.38472 50.75228 17.28159 15.58599 43.79002 39.17542 87.12151 41.02679
## [9] 40.39177 98.68102
Generování celých čísel
round(runif(10,min = 0, max = 100),0)
## [1] 70 86 29 54 57 54 87 34 80 86
jiná možnost = sample()
sample(0:100,10)
## [1] 72 74 6 80 77 12 44 66 75 48
Simulace soutěže
Soutěžící je postaven před troje dveře. Za jedněmi z dveří je (náhodně) schovaná výhra v podobě bakalářského titulu ze statistiky, za dalšími dvěma dveřmi není nic. Soutěžící neví, za kterými dveřmi se skrývá výhra.
Má tedy za úkol vybrat jedny dveře, které by chtěl otevřít (1. kolo). Jakmile na ně soutěžící ukáže, moderátor (ví co je za kterými dveřmi) otevře jedny ze zbývajících (nevybraných) dveří za kterými nic není. Nyní má soutěžící možnost si vybrat, zda potvrdí svoji původní volbu dveří nebo naopak změní svoji volbu na druhé zatím neotevřené dveře (2. kolo). Zvolené dveře následně moderátor otevře a soutěžící buď vyhraje titul nebo nikoliv podle toho, zda zvolil správné dveře.
simuluj_soutez <- function(strategie) {
# Počet výher
vitezstvi <- 0
# Počet simulací
pocet_simulaci <- 100000
for (i in 1:pocet_simulaci) {
# Náhodné umístění výhry za jedny z dveří s funkci runif()
vyhra <- round(runif(n=1, min=1, max=3), 0)
##sample() je o mnohem méně komplikovaný
# Soutěžící volí dveře v prvním kole
vybrane_dvere_1 <- sample(1:3, 1)
# Moderátor otevírá jedny z nevybraných dveří, za kterými není výhra
otevrene_dvere <- sample(setdiff(1:3, c(vybrane_dvere_1, vyhra)), 1)
# Druhý výběr dveří podle strategie
vybrane_dvere_2 <- strategie(vybrane_dvere_1, otevrene_dvere)
# Zjištění, zda soutěžící vyhrál
vitezstvi <- vitezstvi + (vybrane_dvere_2 == vyhra)
}
# Výpočet pravděpodobnosti výhry
pravdepodobnost_vyhry <- round((vitezstvi / pocet_simulaci)*100,0)
return(pravdepodobnost_vyhry)
}
Strategie soutěžících
Strategie Petra
Soutěžící Petr v 1. kole vždy zvolí náhodně dveře, za kterými si myslí že je výhra. V 2.kole si je stále nejistý a opět zvolí dveře náhodně. S jakou pravděpodobností si odnese výhru? (Kolikrát ze 100 000 simulací otevře dveře s výhrou)
strategie_petr <- function(vybrane_dvere_1, otevrene_dvere) {
# Soutěžící Petr volí náhodně v 2. kole
return(sample(1:3, 1))
}
Strategie Karla
Soutěžící Karla v 1. kole vždy zvolí náhodně dveře, za kterými si myslí že je výhra. V 2.kole si je ale jistá že udělala chybu a své rozhodnutí vždy změní (vybere druhé stále zavřené dveře). S jakou pravděpodobností si odnese výhru? (Kolikrát ze 100 000 simulací otevře dveře s výhrou)
strategie_karla <- function(vybrane_dvere_1, otevrene_dvere) {
# Soutěžící Karla vždy změní svoji volbu v 2. kole
return(setdiff(1:3, c(vybrane_dvere_1, otevrene_dvere)))
}
Strategie Anny
Soutěžící Anna v 1. kole vždy zvolí náhodně dveře, za kterými si myslí že je výhra. V 2.kole vždy stále věří svému původnímu rozhodnutí a vždy trvá na otevření původně označených dveří. S jakou pravděpodobností si odnese výhru? (Kolikrát ze 100 000 simulací otevře dveře s výhrou)
strategie_anna <- function(vybrane_dvere_1, otevrene_dvere) {
# Soutěžící Anna trvá na své původní volbě v 2. kole
return(vybrane_dvere_1)
}
Simulace pro soutěžícího
pravdepodobnost_petr <- simuluj_soutez(strategie_petr)
cat("Pravděpodobnost výhry Petra:", pravdepodobnost_petr, "%")
## Pravděpodobnost výhry Petra: 33 %
pravdepodobnost_karla <- simuluj_soutez(strategie_karla)
cat("Pravděpodobnost výhry Karly:", pravdepodobnost_karla, "%")
## Pravděpodobnost výhry Karly: 50 46 %
pravdepodobnost_anna <- simuluj_soutez(strategie_anna)
cat("Pravděpodobnost výhry Anny:", pravdepodobnost_anna, "%")
## Pravděpodobnost výhry Anny: 33 %
V této úloze budete pracovat s datovým souborem obsahujícím souřadnice, kde každá souřadnice obsahuje hodnoty X a Y. Samy si ho vytvoříte, musí obsahovat alespoň 20 rozdílných bodů. Váš úkol se skládá ze tří částí. Nejprve vytvořte . Dále vytvořte podobnou vlastní funkci pro výpočet Manhattanské vzdálenosti mezi dvěma souřadnicemi s použitím Manhattanské vzdálenostní formule. 2) Dále napište funkci, která vezme dataset souřadnic a vypočítá jak Euklidovské, tak Manhattanské vzdálenosti mezi všemi páry souřadnic. 3) Nakonec najděte a zobrazte v grafu pár souřadnic s nejmenší a největší Euklidovskou vzdáleností a pár souřadnic s nejmenší a největší Manhattanskou vzdáleností.
souradice_bod <- read.csv("souradnice_bod.csv", encoding = "UTF-8")
souradice_bod
## Bod X Y
## 1 A 69 37
## 2 B 20 34
## 3 C 24 63
## 4 D 78 44
## 5 E 74 32
## 6 F 71 51
## 7 G 65 46
## 8 H 84 9
## 9 I 86 69
## 10 J 32 92
## 11 K 16 84
## 12 L 27 24
## 13 M 39 94
## 14 N 75 90
## 15 O 61 44
## 16 P 11 43
## 17 Q 62 45
## 18 R 14 17
## 19 S 42 43
## 20 T 16 47
Funkce pro výpočet Euklidovské vzdálenosti mezi dvěma body
Vlastní funkce, která vypočítá Euklidovskou vzdálenost mezi dvěma souřadnicemi s použitím Euklidovské vzdálenostní formule:
\[L^{2} = \sqrt{(x_2-x_1)^2+(y_2-y_1)^2}\]
euklidovska_vzdalenost <- function(matrix_bod) {
dist(matrix_bod,method = "euclidean")
}
Funkce pro výpočet Manhattanské vzdálenosti mezi dvěma body
Vlastní funkce pro výpočet Manhattanské vzdálenosti mezi dvěma souřadnicemi s použitím Manhattanské vzdálenostní formule
\[L^{1} = |x_2-x_1|+|y_2-y_1|\]
manhattanska_vzdalenost <- function(matrix_bod) {
dist(matrix_bod,method = "manhattan")
}
Funkce pro výpočet Euklidovských a Manhattanských vzdáleností mezi všemi páry souřadnic
vypocet_vzdalenosti <- function(matrix_bod) {
manhattanska_dist <- manhattanska_vzdalenost(matrix_bod)
euklidovska_dist <- euklidovska_vzdalenost(matrix_bod)
df_man = reshape2::melt(as.matrix(manhattanska_dist))
df_eu = reshape2::melt(as.matrix(euklidovska_dist))
return(merge(df_eu,df_man,by = c("Var1", "Var2")))
}
mat_bod = matrix(data = c(souradice_bod$X, souradice_bod$Y), ncol = 2)
tab_Man_Euk_vydalenost <- vypocet_vzdalenosti(mat_bod) |>
dplyr::rename("euklidovska_vzdalenost" = "value.x",
"manhattanska_vzdalenost" = "value.y")
summarize_df <- tab_Man_Euk_vydalenost |>
summarise(min_man = min(manhattanska_vzdalenost),
max_man = max(manhattanska_vzdalenost),
min_euk = min(euklidovska_vzdalenost),
max_euk = max(euklidovska_vzdalenost))
Funkce pro nalezení a zobrazení extrémů
ggplot2::ggplot(data = tab_Man_Euk_vydalenost, aes(x=tab_Man_Euk_vydalenost$euklidovska_vzdalenost,y=tab_Man_Euk_vydalenost$manhattanska_vzdalenost))+geom_point(color=factor(tab_Man_Euk_vydalenost$manhattanska_vzdalenost))+
labs(x = "Euklodovská vzdálenost",
y = "Manhattanská vzdálenost")+
scale_x_log10()
V souboru „ceny_aut.csv“ máte reálné prodejní ceny automobilů a jejich základních charakteristik.
Odstraňte duplicitní hodnoty záznamů – zanechte pouze poslední pozorování v čase v případě že všechny ostatní proměnné jsou stejné.
df_ceny_aut <- read.csv(file = "ceny_aut.csv",sep = ';')
df_ceny_aut <- df_ceny_aut[!duplicated(df_ceny_aut),]
head(df_ceny_aut)
## vehicle_type
## 1 OCTAVIA 1.6 TDI 66kW Ambition Combi, kombi, 1 598 ccm
## 2 OCTAVIA 1.6 TDI 81kW Ambition, liftback, 1 598 ccm
## 3 OCTAVIA 1.6 TDI 66kW Active Combi, kombi, 1 598 ccm
## 4 OCTAVIA 2.0 TDI 110kW Style Combi, kombi, 1 968 ccm
## 5 OCTAVIA 1.6 TDI 81kW Ambition Fresh Combi, kombi, 1 598 ccm
## 6 OCTAVIA 2.0 TDI 110kW Style, liftback, 1 968 ccm
## year_of_manufacture engine_volume fuel_type number_of_km vehicle_model
## 1 2016 1 598 ccm NAFTA 183903 Škoda Octavia
## 2 2016 1 598 ccm NAFTA 159681 Škoda Octavia
## 3 2016 1 598 ccm NAFTA 169671 Škoda Octavia
## 4 2016 1 968 ccm NAFTA 164296 Škoda Octavia
## 5 2016 1 598 ccm NAFTA 119547 Škoda Octavia
## 6 2016 1 968 ccm NAFTA 170915 Škoda Octavia
## price_total status time_stamp
## 1 199000 for_sale 11.09.2020 23:44
## 2 209000 for_sale 11.09.2020 23:44
## 3 219000 for_sale 11.09.2020 23:44
## 4 269000 for_sale 11.09.2020 23:44
## 5 269000 for_sale 11.09.2020 23:44
## 6 279000 for_sale 11.09.2020 23:44
Vytvořte nové sloupce značka a model a vyplňte je příslušnými hodnotami (např. značka Škoda, model Fabia).
df_ceny_aut <- df_ceny_aut |>
separate(col = "vehicle_model", into = c("znacka","model"), sep = " ",remove = F)
df_ceny_aut |>
select(vehicle_type,znacka,model) |> head()
## vehicle_type znacka model
## 1 OCTAVIA 1.6 TDI 66kW Ambition Combi, kombi, 1 598 ccm Škoda Octavia
## 2 OCTAVIA 1.6 TDI 81kW Ambition, liftback, 1 598 ccm Škoda Octavia
## 3 OCTAVIA 1.6 TDI 66kW Active Combi, kombi, 1 598 ccm Škoda Octavia
## 4 OCTAVIA 2.0 TDI 110kW Style Combi, kombi, 1 968 ccm Škoda Octavia
## 5 OCTAVIA 1.6 TDI 81kW Ambition Fresh Combi, kombi, 1 598 ccm Škoda Octavia
## 6 OCTAVIA 2.0 TDI 110kW Style, liftback, 1 968 ccm Škoda Octavia
Změňte proměnnou engine_volume na číselnou proměnnou objem motoru.
df_ceny_aut$engine_volume <- as.numeric(gsub("[^[:digit:]]", "", df_ceny_aut$engine_volume))
df_ceny_aut <- df_ceny_aut |>
rename(objem_monitor = engine_volume)
df_ceny_aut|>
select(vehicle_type,objem_monitor) |> head()
## vehicle_type objem_monitor
## 1 OCTAVIA 1.6 TDI 66kW Ambition Combi, kombi, 1 598 ccm 1598
## 2 OCTAVIA 1.6 TDI 81kW Ambition, liftback, 1 598 ccm 1598
## 3 OCTAVIA 1.6 TDI 66kW Active Combi, kombi, 1 598 ccm 1598
## 4 OCTAVIA 2.0 TDI 110kW Style Combi, kombi, 1 968 ccm 1968
## 5 OCTAVIA 1.6 TDI 81kW Ambition Fresh Combi, kombi, 1 598 ccm 1598
## 6 OCTAVIA 2.0 TDI 110kW Style, liftback, 1 968 ccm 1968
Kategorizujte automobily do 4 cenových kategorií (levné, středně levné, středně drahé, drahé), podle toho, zda je jeho cena pod hodnotou 25% kvantilu, respektive 50% a 75%.
kvanlita <- quantile(df_ceny_aut$price_total, probs = c(0.25, 0.5, 0.75),na.rm = F)
df_ceny_aut <- df_ceny_aut |>
mutate(cenova_kategorie = cut(df_ceny_aut$price_total,
breaks = c(-Inf, kvanlita, Inf),
labels = c("levne", "stredne levne", "stredne drahe", "drahe")))
df_ceny_aut |> select(vehicle_type,price_total,cenova_kategorie) |> head()
## vehicle_type price_total
## 1 OCTAVIA 1.6 TDI 66kW Ambition Combi, kombi, 1 598 ccm 199000
## 2 OCTAVIA 1.6 TDI 81kW Ambition, liftback, 1 598 ccm 209000
## 3 OCTAVIA 1.6 TDI 66kW Active Combi, kombi, 1 598 ccm 219000
## 4 OCTAVIA 2.0 TDI 110kW Style Combi, kombi, 1 968 ccm 269000
## 5 OCTAVIA 1.6 TDI 81kW Ambition Fresh Combi, kombi, 1 598 ccm 269000
## 6 OCTAVIA 2.0 TDI 110kW Style, liftback, 1 968 ccm 279000
## cenova_kategorie
## 1 levne
## 2 levne
## 3 levne
## 4 levne
## 5 levne
## 6 levne
Napočítejte vhodné hodnoty základních popisných statistik pro vámi vybrané proměnné, případně zachyťte jejich vztah. Popište výsledek slovy.
df_ceny_aut |>
summarise(number_of_car = n(),
latest_manifacture_year = max(year_of_manufacture),
biggest_engine_volume = max(objem_monitor),
smallest_engine_vomlume = min(objem_monitor),
average_engine_volume = mean(objem_monitor),
nejvetsi_spotreba = max(number_of_km/objem_monitor),
nejmensi_spotreba = min(number_of_km/objem_monitor))
## number_of_car latest_manifacture_year biggest_engine_volume
## 1 1662 2020 2199
## smallest_engine_vomlume average_engine_volume nejvetsi_spotreba
## 1 998 1740.556 175.3694
## nejmensi_spotreba
## 1 3.222296
Opakujte předchozí bod pro skupiny pozorování vytvořené podle značky automobilu. Popište výsledek slovy.
df_ceny_aut |>
group_by(znacka) |>
summarise(pocet_aut = n(),
latest_manifacture_year = max(year_of_manufacture),
biggest_engine_volume = max(objem_monitor),
smallest_engine_vomlume = min(objem_monitor),
average_engine_volume = mean(objem_monitor),
nejvetsi_spotreba = max(number_of_km/objem_monitor),
nejmensi_spotreba = min(number_of_km/objem_monitor))
## # A tibble: 2 × 8
## znacka pocet_aut latest_manifacture_year biggest_engine_volume
## <chr> <int> <int> <dbl>
## 1 Hyundai 32 2018 2199
## 2 Škoda 1630 2020 1984
## # ℹ 4 more variables: smallest_engine_vomlume <dbl>,
## # average_engine_volume <dbl>, nejvetsi_spotreba <dbl>,
## # nejmensi_spotreba <dbl>
Pro značku Hyundai
Pro značku Škoda
Vytvořte alespoň 3 grafy, které vhodně znázorní hodnoty/vztahy v datech. Dejte si záležet, vhodně pojmenujte osy, vyberte vhodné barvy atd. Popište výsledek slovy.
1. Graf objemu monitoru podle značky aut
library("plotly")
plot_ly(x = df_ceny_aut$znacka, y = df_ceny_aut$objem_monitor, type = 'box', color = factor(df_ceny_aut$znacka),quartilemethod="exclusive") |>
layout(title = "Objem monitor podle značky",
xaxis = list(
title = "Značka"
),
yaxis = list(
title = "Objem Monitor",
range = c(900,2500)
)
)
Slovní odpověď
U značky Hyundai
U značky Škoda
2. Graf podílu aut podle typu paliva
df_plot2 <- df_ceny_aut |>
group_by(fuel_type) |>
summarise(podil = n()/1662)
colors <- c('rgb(158,202,225)', 'rgb(58,200,225)', 'rgb(49,130,189)', 'rgb(171,104,87)', 'rgb(114,147,203)')
plot_ly(df_plot2, labels = df_plot2$fuel_type, values = df_plot2$podil, type = 'pie', textposition = 'inside', textinfo = 'label+percent',insidetextfont = list(color = '#FFFFFF'),
marker = list(colors = colors,
line = list(color = '#FFFFFF', width = 1))) |>
layout(title = 'Podíl aut podle typu paliva')
Slovní odpověď: 80.7% aut používá Nafta, 0,842% aut používá zemní plyn, zbývající 18.5% používá benzín
3. Graf ceny podle roku výroky
df_plot3 <- df_ceny_aut |>
group_by(year_of_manufacture) |>
summarise(nejlevnejsi = min(price_total),
nejdrazsi = max(price_total))
plot_ly(df_plot3, x = df_plot3$year_of_manufacture, y = df_plot3$nejdrazsi, type = 'bar', name = 'Nejdražší cena', color = df_plot3$year_of_manufacture) |>
add_lines(y = df_plot3$nejlevnejsi, name = "Nejlevnější cena") |>
layout(title = "Cena podle roku výroky",
xaxis = list(title = "", tickangle = -45))
Slovní odpověď: nejdražší cena se vyskytla v roce 2018, nejlevnější v roce 2012